iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
JavaScript

Javascript網頁程式管理系統系列 第 12

day 12 javascript投履歷找工作網頁程式管理系統

  • 分享至 

  • xImage
  •  

今天是第十二天我們可以寫一個javascript投履歷找工作網頁程式管理系統,以下是我的程式碼

  1. 履歷上傳:求職者可以上傳自己的履歷(如 PDF 或 Word 檔)。
  2. 職位瀏覽:展示職位列表,讓求職者可以查看並申請。
  3. 申請追蹤:顯示求職者已申請的職位,並追蹤每個申請的狀態(審核中、面試、已拒絕、錄取等)。
  4. 公司管理:公司可以發布職位,並管理應徵者的申請。

基本架構

<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>投履歷找工作系統</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        h1 {
            color: #333;
        }
        form {
            margin-bottom: 20px;
        }
        table {
            width: 100%;
            border-collapse: collapse;
        }
        table, th, td {
            border: 1px solid #ccc;
        }
        th, td {
            padding: 10px;
            text-align: left;
        }
        .job-listing {
            margin-bottom: 20px;
        }
        .status {
            font-weight: bold;
            color: green;
        }
    </style>
</head>
<body>

    <h1>投履歷找工作管理系統</h1>

    <!-- 履歷上傳表單 -->
    <form id="resumeForm">
        <h2>上傳履歷</h2>
        <input type="file" id="resume" accept=".pdf, .doc, .docx" required>
        <button type="submit">上傳履歷</button>
    </form>

    <!-- 職位列表 -->
    <h2>可申請職位</h2>
    <div id="jobListings" class="job-listing">
        <!-- 職位會透過 JavaScript 動態添加 -->
    </div>

    <!-- 已申請職位追蹤 -->
    <h2>已申請職位</h2>
    <table id="appliedJobs">
        <thead>
            <tr>
                <th>職位名稱</th>
                <th>公司名稱</th>
                <th>申請狀態</th>
            </tr>
        </thead>
        <tbody>
            <!-- 已申請職位會透過 JavaScript 動態添加 -->
        </tbody>
    </table>

    <script>
        // 假資料 - 職位列表
        const jobs = [
            { id: 1, title: '前端工程師', company: '科技公司A', status: '未申請' },
            { id: 2, title: '後端工程師', company: '科技公司B', status: '未申請' },
            { id: 3, title: '資料科學家', company: '數據公司C', status: '未申請' }
        ];

        // 已申請職位列表
        const appliedJobs = [];

        // 顯示職位列表
        function displayJobListings() {
            const jobListings = document.getElementById('jobListings');
            jobListings.innerHTML = ''; // 清空職位列表

            jobs.forEach(job => {
                const jobDiv = document.createElement('div');
                jobDiv.classList.add('job');

                const jobTitle = document.createElement('h3');
                jobTitle.innerText = `${job.title} - ${job.company}`;
                jobDiv.appendChild(jobTitle);

                const applyButton = document.createElement('button');
                applyButton.innerText = '申請此職位';
                applyButton.disabled = job.status === '已申請';
                applyButton.addEventListener('click', () => applyJob(job));
                jobDiv.appendChild(applyButton);

                jobListings.appendChild(jobDiv);
            });
        }

        // 處理申請職位
        function applyJob(job) {
            job.status = '已申請'; // 更新職位狀態

            // 將職位添加到已申請職位列表
            appliedJobs.push({
                title: job.title,
                company: job.company,
                status: '審核中'
            });

            // 重新渲染職位列表和申請追蹤列表
            displayJobListings();
            displayAppliedJobs();
        }

        // 顯示已申請職位列表
        function displayAppliedJobs() {
            const appliedJobsTable = document.getElementById('appliedJobs').querySelector('tbody');
            appliedJobsTable.innerHTML = ''; // 清空已申請職位列表

            appliedJobs.forEach(appliedJob => {
                const row = document.createElement('tr');
                row.innerHTML = `
                    <td>${appliedJob.title}</td>
                    <td>${appliedJob.company}</td>
                    <td><span class="status">${appliedJob.status}</span></td>
                `;
                appliedJobsTable.appendChild(row);
            });
        }

        // 處理履歷上傳
        document.getElementById('resumeForm').addEventListener('submit', function(e) {
            e.preventDefault();
            const resume = document.getElementById('resume').files[0];

            if (resume) {
                alert('履歷上傳成功!');
            } else {
                alert('請選擇一個檔案。');
            }
        });

        // 初始化
        displayJobListings();
    </script>

</body>
</html>

這個系統包含了以下功能:

  1. 履歷上傳:用戶可以選擇並上傳自己的履歷(上傳動作目前只是模擬,可以再擴展加入實際的後端上傳功能)。
  2. 職位瀏覽與申請:系統展示了一些職位,用戶可以選擇並申請職位。申請後,職位會被標記為已申請,並且不允許重複申請。
  3. 申請追蹤:申請的職位會顯示在「已申請職位」表格中,狀態初始為「審核中」。

我會以javascript做程式的解說

1. HTML 結構

這部分的目的是提供頁面上的基本視覺結構。

<h1>投履歷找工作管理系統</h1>
  • 標題部分,展示頁面的主標題。
<form id="resumeForm">
    <h2>上傳履歷</h2>
    <input type="file" id="resume" accept=".pdf, .doc, .docx" required>
    <button type="submit">上傳履歷</button>
</form>
  • <form> 表單:讓用戶上傳履歷。使用了 <input type="file"> 讓用戶可以選擇文件,並限制文件類型(只允許 .pdf, .doc, 和 .docx)。
  • <button>:點擊後會提交表單並觸發 JavaScript 處理上傳。
<div id="jobListings" class="job-listing">
    <!-- 職位會透過 JavaScript 動態添加 -->
</div>
  • <div id="jobListings">:這個 div 是用來動態展示職位列表的容器。職位列表會通過 JavaScript 動態生成。
<table id="appliedJobs">
    <thead>
        <tr>
            <th>職位名稱</th>
            <th>公司名稱</th>
            <th>申請狀態</th>
        </tr>
    </thead>
    <tbody>
        <!-- 已申請職位會透過 JavaScript 動態添加 -->
    </tbody>
</table>
  • <table> 表格:這個表格用來顯示用戶已申請的職位和其申請狀態。每次申請職位後,新的資料會被添加到這裡。

2. JavaScript 程式邏輯

2.1 假資料 - 職位列表

const jobs = [
    { id: 1, title: '前端工程師', company: '科技公司A', status: '未申請' },
    { id: 2, title: '後端工程師', company: '科技公司B', status: '未申請' },
    { id: 3, title: '資料科學家', company: '數據公司C', status: '未申請' }
];
  • 這是一個假設的職位列表,用於模擬現實中的工作機會。每個職位包含 id(唯一識別碼)、title(職位名稱)、company(公司名稱)、status(申請狀態)。

2.2 已申請職位列表

const appliedJobs = [];
  • 這個空的陣列用來存儲用戶申請的職位。每當用戶申請某個職位時,該職位的信息就會被添加到這裡。

2.3 顯示職位列表

function displayJobListings() {
    const jobListings = document.getElementById('jobListings');
    jobListings.innerHTML = ''; // 清空職位列表
  • 這個函數負責在頁面上動態顯示職位。首先,通過 innerHTML = '' 清空職位列表,以確保每次刷新時不會重複顯示。
    jobs.forEach(job => {
        const jobDiv = document.createElement('div');
        jobDiv.classList.add('job');
  • 使用 forEach 迭代 jobs 陣列中的每個職位,並為每個職位創建一個 div 容器。
        const jobTitle = document.createElement('h3');
        jobTitle.innerText = `${job.title} - ${job.company}`;
        jobDiv.appendChild(jobTitle);
  • 為每個職位創建一個 h3 標題,並顯示職位名稱和公司名稱。
        const applyButton = document.createElement('button');
        applyButton.innerText = '申請此職位';
        applyButton.disabled = job.status === '已申請';
        applyButton.addEventListener('click', () => applyJob(job));
        jobDiv.appendChild(applyButton);
        jobListings.appendChild(jobDiv);
    });
}
  • 為每個職位創建一個 "申請此職位" 按鈕。如果該職位已申請,則按鈕會被禁用 (disabled = true)。
  • 點擊按鈕後,會呼叫 applyJob(job) 函數進行職位申請。

2.4 申請職位

function applyJob(job) {
    job.status = '已申請'; // 更新職位狀態
    appliedJobs.push({
        title: job.title,
        company: job.company,
        status: '審核中'
    });
    displayJobListings();
    displayAppliedJobs();
}
  • 當用戶申請職位時,該職位的狀態被更新為 "已申請",並將職位信息添加到 appliedJobs 陣列中(狀態初始為 "審核中")。
  • 之後,更新職位列表與已申請職位列表。

2.5 顯示已申請職位

function displayAppliedJobs() {
    const appliedJobsTable = document.getElementById('appliedJobs').querySelector('tbody');
    appliedJobsTable.innerHTML = ''; // 清空已申請職位列表

    appliedJobs.forEach(appliedJob => {
        const row = document.createElement('tr');
        row.innerHTML = `
            <td>${appliedJob.title}</td>
            <td>${appliedJob.company}</td>
            <td><span class="status">${appliedJob.status}</span></td>
        `;
        appliedJobsTable.appendChild(row);
    });
}
  • 此函數負責顯示已申請的職位。首先清空表格內容,然後遍歷 appliedJobs 陣列,將每個已申請職位添加到表格中。

2.6 履歷上傳處理

document.getElementById('resumeForm').addEventListener('submit', function(e) {
    e.preventDefault();
    const resume = document.getElementById('resume').files[0];

    if (resume) {
        alert('履歷上傳成功!');
    } else {
        alert('請選擇一個檔案。');
    }
});
  • 這個程式處理用戶上傳履歷。當用戶提交表單時,防止頁面重新載入 (e.preventDefault()),並檢查用戶是否已選擇檔案。如果有檔案,顯示上傳成功訊息,否則提示用戶選擇檔案。

2.7 初始化

displayJobListings();
  • 呼叫 displayJobListings() 來顯示職位列表,這樣頁面加載時會立即顯示可申請的職位。

結論

這個 JavaScript 投履歷找工作系統讓用戶能夠上傳履歷、查看並申請職位、以及追蹤已申請的職位狀態。每個步驟都由清晰的 JavaScript 函數來處理,用戶界面和邏輯相對獨立且容易理解。


上一篇
day 11 javascript 股票網頁程式管理系統
下一篇
day 13 javascript比價網站網頁程式管理系統
系列文
Javascript網頁程式管理系統25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言